In a business enterprise environment, the JAVA 2 Enterprise Edition (J2EE) platform is often used to build distributed transactional applications for the enterprise. To allow for rapid application design, the J2EE platform provides a component-based approach to the design, development, assembly and deployment of enterprise applications. The J2EE platform offers a multi-tiered distributed application model, and the ability to reuse components. In a multi-tiered distributed application model, application logic is divided into components according to their function. The components are themselves often physically divided among separate machines depending on their association to a certain J2EE environment tier. Communication for the purpose of coordination between physically and logically distinct components of an enterprise application is therefore a complex task.
The JAVA Message Service (JMS) API was introduced primarily for the purpose of allowing JAVA applications to interact with messaging-oriented middleware (MOM) systems such as IBM's MQSeries and Peerlogic's PIPES software. Today, JMS has largely replaced such MOM systems and many vendors have adopted and implemented the JMS API. JMS has become increasingly robust and currently offers such features as the capability for any application client, Enterprise JAVABean (EJB) or Web component to synchronously send and/or receive a JMS message. Application client components can also receive JMS messages asynchronously. A unique type of EJB, the message-driven bean, extends the capability for asynchronous JMS message consumption to other enterprise components. Generally, the JMS API simplifies inter-component communication by enabling loosely coupled asynchronous communication across the board between J2EE components individually and also between legacy system messaging implementations and J2EE components considered collectively.
Frequently, a JMS based application development requires configuring and managing certain JMS components on the server side like JMS Connection Factories, JMS Destinations etc., as well as designing application clients capable of interacting with the server-side components. Application clients utilizing JMS functionality can be categorized as producers, consumers, or both. Producer-type application clients are responsible for creating various JMS message types (such as text, XML, objects, streams and bytes) and relaying them to JMS destinations (such as queues and topics). Consumer-type application clients may subsequently receive messages from these destinations in either synchronous or asynchronous fashion.
Message producers and consumers communicate using either the “Point-to-Point” or the “Publish-Subscribe” messaging model. The chief characteristic of the “Point-to-Point” model is a one-to-one relationship between messages sent by message producers and message consumers. The JMS API achieves this by using queue destinations. A single message may be enqueued by at most one message producer, and may be dequeued by at most one consumer. The “Publish-Subscribe” model differs in that a one-to-many relationship exists between message producers and consumers. Messages are routed through “Topic” destinations. A single message may be published into the topic by, at most, one message producer, yet may be retrieved by a plurality of message consumers. Most implementations of the JMS API support each of the “Point-to-Point” and the “Publish/Subscribe” messaging methodologies, as well as combinations of the two, further easing issues of integration with legacy messaging products.
The JAVA Management Extensions (JMX) comprise a set of specifications and development tools for managing JAVA environments, and for building third-generation Operation, Administration and Management/Monitoring (OAM) solutions. It specifies management architecture and APIs, as well as basic management services. JMX offers a tiered architecture into which managed resources and management applications can be integrated in a plug-and-play manner.
The standard JMX architecture is composed of 3 tiers—the instrumentation level, the agent level, and the manager level, often referred to as the “distributed services level”. The instrumentation level typically contains objects of broad interest to developers generally. The agent level provides management agents which are containers that provide core management services which are capable of being extended by adding other JMX resources. Finally, the manager level provides management components that operate as a manager or agent for distribution and consolidation of management services.
In application servers, such as BEA's WebLogic Server, JMX is extensively used for operation, administration and management of application server objects through interaction with Management Beans (also referred to as MBeans). WebLogic Server, for example, utilitizes “Config MBeans” and “Runtime MBeans” to configure and monitor server internals. “Config MBeans” represent the configuration information of a booted WebLogic Server. The application server creates a “Config MBean” for each element of the config.xml file and an administrator can modify the configuration of a running application server by simply interacting with the identified “Config MBean”. A “Runtime MBean” is used for monitoring application server performance by maintaining state information on any variety of server statistics and an administrator may readily ascertain the desired information by interacting with the “Runtime MBean” using the functionality of the JMX API.
At a more granular level, the JMS and JMX APIs are themselves very complex, and the intricacies of both can be difficult to learn and use. Therefore, utilizing these APIs is often a tedious process, and is also sometimes confusing to novice programmers and developers. It is hot uncommon for a developer to have to write long and complicated code to instantiate JMS objects, to facilitate interactions between JMS objects and to manage all of these objects and transactions. The computer instructions necessary to build similar but slightly different JMS objects and their usage often requires the programmer to rewrite essentially the same code multiple times for each object, resulting in wasted resources and a decrease in overall efficiency. A method and/or system that could be used for reducing the complexity of this process and for facilitating the Operation, Administration and Management/Monitoring and the usage of JMS objects would be of great benefit.